package com.fosun.sprcore.tools.generatecode.project;

import java.util.ArrayList;
import java.util.List;

import com.fosun.sprcore.tools.generatecode.base.GenerateCodeMain;
import com.fosun.sprcore.tools.generatecode.template.CrudModuleFileTemplate;
import com.fosun.sprcore.tools.generatecode.template.ModuleFileTemplate;
import com.fosun.sprcore.tools.generatecode.template.crudmodulefile.AdditionListSelectField;
import com.fosun.sprcore.tools.generatecode.template.CrudModuleFileTemplate.TableColumnModel;

public class UucGenerateCodeMain extends GenerateCodeMain {

	public static void main(String[] args) throws Exception {
		GenerateCodeMain main = new GenerateCodeMain();
		main.init();
//		shiroService(main);
//		commonRemote(main);
		spr_uuc_user(main);
		spr_uuc_menu(main);
		spr_uuc_privilege(main);
		spr_uuc_role(main);
		spr_uuc_role_user(main);
		spr_uuc_role_privilege(main);
		spr_uuc_url_privilege(main);
	}
	
	private static void shiroService(GenerateCodeMain main) throws Exception{
		if(true){
			ModuleFileTemplate t = new ModuleFileTemplate();
			t.setProjectWar("");
			t.setPackageName("com.fosun.spr.plugin.uuc.shiro");
			t.setModuleName("uucLogin");
//			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listDictValue",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
//			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("create",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_POST,null));
//			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("update",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_POST,null));
//			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listBuildingregion",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,null));
//			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("delete",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_POST,null));			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("getUserByLoginNo",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,null));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("submitLogin",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_POST,null));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("submitLogout",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,null));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("needLoginError",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,null));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listUserMenus",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listPrivilegeByUserId",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,null));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listUrlPrivileges",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
			t.addServcieModelList(new ModuleFileTemplate.ServcieModel("hasPrivilege",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_POST,null));
			t.generate(main);			
		}	
	}
	
	private static void commonRemote(GenerateCodeMain main) throws Exception{
		ModuleFileTemplate t = new ModuleFileTemplate();
		t.setProjectWar("spr_boot_demo");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucCommonRemote");
		t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listPrivilege",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
		t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listMenu",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
		t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listUser",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
		t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listRole",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
		t.addServcieModelList(new ModuleFileTemplate.ServcieModel("listPrivilege",ModuleFileTemplate.ServcieModel.SUBMITMETHOD_GET,ModuleFileTemplate.ServcieModel.METHODTYPE_LIST));
		t.generate(main);			
	}

	private static void spr_uuc_user(GenerateCodeMain main) throws Exception {
		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucUser");

		t.setModuleLabel("帐号管理");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_user");
		t.setUniqueColumn("login_no");
		t.setKeywordColumns(new String[] {"login_no","user_name"});
		t.setAdditionListSelectFields(null);

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("login_no");
			column.setDataType("string");
			column.setComment("帐号名");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("user_name");
			column.setDataType("string");
			column.setComment("姓名");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("mobile");
			column.setDataType("string");
			column.setComment("手机");
			column.setIsNotNull("0");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("email");
			column.setDataType("string");
			column.setComment("邮箱");
			column.setIsNotNull("0");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("mi_psd");
			column.setDataType("string");
			column.setComment("密码");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}		
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("memo");
			column.setDataType("string");
			column.setComment("备注");
			column.setIsNotNull("0");

			column.setDisplayType("textarea");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
	
	private static void spr_uuc_menu(GenerateCodeMain main) throws Exception {
		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucMenu");

		t.setModuleLabel("菜单管理");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_menu");
		t.setUniqueColumn("menu_code");
		t.setKeywordColumns(new String[] {"menu_code","menu_name"});
		t.setAdditionListSelectFields(null);
		

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("menu_code");//唯一性判定
			column.setDataType("string");
			column.setComment("菜单代码");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("menu_name");
			column.setDataType("string");
			column.setComment("菜单名称");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("parent_id");
			column.setDataType("string");
			column.setComment("菜单父节点");
			column.setIsNotNull("0");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listMenu");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
//		if (true) {
//			TableColumnModel column = new TableColumnModel();
//			column.setFieldName("type");
//			column.setDataType("string");
//			column.setComment("菜单类型");
//			column.setIsNotNull("0");
//
//			column.setDisplayType("input_text");
//			column.setDisplayTypeValue("");
//
//			column.setIsInList("0");
//			column.setIsInCreate("1");
//			column.setIsInUpdate("1");
//			cList.add(column);
//		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("url");
			column.setDataType("string");
			column.setComment("菜单链接地址");
			column.setIsNotNull("0");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}	
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("privilege_id");
			column.setDataType("string");
			column.setComment("对应权限");
			column.setIsNotNull("0");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listPrivilege");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}	
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("no");
			column.setDataType("string");
			column.setComment("排序");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}			
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("memo");
			column.setDataType("string");
			column.setComment("备注");
			column.setIsNotNull("0");

			column.setDisplayType("textarea");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
	
	
	
	private static void spr_uuc_privilege(GenerateCodeMain main) throws Exception {

		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucPrivilege");

		t.setModuleLabel("权限管理");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_privilege");
		t.setUniqueColumn("privilege_code");
		t.setKeywordColumns(new String[] {"privilege_code","privilege_name"});
		t.setAdditionListSelectFields(null);

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("privilege_code");//唯一性判定
			column.setDataType("string");
			column.setComment("权限代码");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("privilege_name");
			column.setDataType("string");
			column.setComment("权限名称");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}	
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("memo");
			column.setDataType("string");
			column.setComment("备注");
			column.setIsNotNull("0");

			column.setDisplayType("textarea");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
	
	private static void spr_uuc_role(GenerateCodeMain main) throws Exception {

		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucRole");

		t.setModuleLabel("权限管理");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_role");
		t.setUniqueColumn("role_name");
		t.setKeywordColumns(new String[] {"role_name"});
		t.setAdditionListSelectFields(null);

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("role_name");
			column.setDataType("string");
			column.setComment("角色名称");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}	
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("memo");
			column.setDataType("string");
			column.setComment("备注");
			column.setIsNotNull("0");

			column.setDisplayType("textarea");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
	
	private static void spr_uuc_role_user(GenerateCodeMain main) throws Exception {

		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucRoleUser");

		t.setModuleLabel("权限管理");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_role_user");
		t.setUniqueColumn("");
		t.setKeywordColumns(null);
		t.setAdditionListSelectFields(new AdditionListSelectField[] {
				new AdditionListSelectField("(SELECT a.user_name FROM spr_uuc_user a WHERE a.id=t1.user_id) user_name","用户"),
				new AdditionListSelectField("(SELECT a.role_name FROM spr_uuc_role a WHERE a.id=t1.role_id) role_name","角色")
		});

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("user_id");
			column.setDataType("string");
			column.setComment("帐号");
			column.setIsNotNull("1");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listUser");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}		
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("role_id");
			column.setDataType("string");
			column.setComment("角色");
			column.setIsNotNull("1");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listRole");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}		
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("memo");
			column.setDataType("string");
			column.setComment("备注");
			column.setIsNotNull("0");

			column.setDisplayType("textarea");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
	
	private static void spr_uuc_role_privilege(GenerateCodeMain main) throws Exception {

		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("uucRolePrivilege");

		t.setModuleLabel("权限管理");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_role_privilege");
		t.setUniqueColumn("");
		t.setKeywordColumns(null);
		t.setAdditionListSelectFields(new AdditionListSelectField[] {
				new AdditionListSelectField("(SELECT a.role_name FROM spr_uuc_role a WHERE a.id=t1.role_id) role_name","角色"),
				new AdditionListSelectField("(SELECT a.privilege_name FROM spr_uuc_privilege a WHERE a.id=t1.privilege_id) privilege_name","权限")
		});

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("role_id");
			column.setDataType("string");
			column.setComment("角色");
			column.setIsNotNull("1");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listRole");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}		
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("privilege_id");
			column.setDataType("string");
			column.setComment("权限");
			column.setIsNotNull("1");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listPrivilege");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}			
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("memo");
			column.setDataType("string");
			column.setComment("备注");
			column.setIsNotNull("0");

			column.setDisplayType("textarea");
			column.setDisplayTypeValue("");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
	
	private static void spr_uuc_url_privilege(GenerateCodeMain main) throws Exception {
		CrudModuleFileTemplate t = new CrudModuleFileTemplate();
		// t.setProjectWar("");
		t.setPackageName("com.fosun.spr.plugin.uuc");
		t.setModuleName("sprUucUrlPrivilege");

		t.setModuleLabel("链接权限配置");
		t.setDbTablePrefix("spr");
		t.setDbTablePrefixTag("_");
		t.setDbTableName("uuc_url_privilege");
		t.setUniqueColumn("url_pattern");
		t.setKeywordColumns(new String[] {"url_pattern"});
		t.setAdditionListSelectFields(new AdditionListSelectField[] {
				new AdditionListSelectField("(SELECT a.privilege_name FROM spr_uuc_privilege a WHERE a.id=t1.privilege_id) privilege_name","权限")
		});

		List<TableColumnModel> cList = new ArrayList<TableColumnModel>();
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("url_pattern");
			column.setDataType("string");
			column.setComment("链接地址（正则）");
			column.setIsNotNull("1");

			column.setDisplayType("input_text");
			column.setDisplayTypeValue("");

			column.setIsInList("1");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		if (true) {
			TableColumnModel column = new TableColumnModel();
			column.setFieldName("privilege_id");
			column.setDataType("string");
			column.setComment("权限");
			column.setIsNotNull("1");

			column.setDisplayType("select_remote");
			column.setDisplayTypeValue("/api/uucCommonRemote/listPrivilege");

			column.setIsInList("0");
			column.setIsInCreate("1");
			column.setIsInUpdate("1");
			cList.add(column);
		}
		t.setTableColumnModelList(cList);
		t.generate(main);
	}
}
